﻿/*************************************
 * Creator:SunnyPaine
 * DateTime:2022/8/22 15:21:52
 * Description:<Description>
 * CopyRight:
 * ***********************************/

using SunnyPaine.Autofac.Extension.SqlSugar.Repository;
using SunnyPaine.Autofac.Extension.Stereotype.Attributes;
using System.Collections.Generic;

namespace SunnyPaine.Autofac.Extension.SqlSugar.Service
{
    /// <summary>
    /// 业务逻辑共性操作。
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class ServiceImpl<T> : IService<T>
    {
        /// <summary>
        /// 数据仓库共性操作对象。
        /// </summary>
        [Autowired]
        protected IRepository<T> Repository { get; set; }


        /// <summary>
        /// 新增一条数据。
        /// </summary>
        /// <param name="data"></param>
        public virtual void Add(T data)
        {
            this.Repository.Insert(data);
        }

        /// <summary>
        /// 新增一组数据。
        /// </summary>
        /// <param name="datas"></param>
        public virtual void Add(List<T> datas)
        {
            this.Repository.InsertRange(datas);
        }

        /// <summary>
        /// 新增或修改一条数据。
        /// </summary>
        /// <param name="data"></param>
        public virtual void AddOrModify(T data)
        {
            this.Repository.InsertOrUpdate(data);
        }

        /// <summary>
        /// 新增或修改一组数据。
        /// </summary>
        /// <param name="datas"></param>
        public virtual void AddOrModify(List<T> datas)
        {
            this.Repository.InsertOrUpdate(datas);
        }

        /// <summary>
        /// 删除指定的数据。
        /// </summary>
        /// <param name="id"></param>
        public virtual void RemoveById(dynamic id)
        {
            this.Repository.DeleteById(id);
        }

        /// <summary>
        /// 批量删除指定的数据。
        /// </summary>
        /// <param name="ids"></param>
        public virtual void RemoveByIds(dynamic[] ids)
        {
            this.Repository.DeleteByIds(ids);
        }

        /// <summary>
        /// 修改指定的数据。
        /// </summary>
        /// <param name="data"></param>
        public virtual void ModifyById(T data)
        {
            this.Repository.UpdateById(data);
        }

        /// <summary>
        /// 获取指定的数据。
        /// </summary>
        /// <typeparam name="TParam"></typeparam>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual T FindById<TParam>(TParam id)
        {
            return this.Repository.SelectById(id);
        }

        /// <summary>
        /// 获取所有的数据。
        /// </summary>
        /// <returns></returns>
        public virtual List<T> FindAll()
        {
            return this.Repository.SelectAll();
        }
    }
}
